// 27. 移除元素
/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
 var removeElement = function(nums, val) {
    var len=nums.length;
    var j=0;
    for(let i=0;i<len;i++){
        if(val!=nums[i]){
            nums[j++]=nums[i];
        }
    }
    return j;
};

// 26. 删除有序数组中的重复项
/**
 * @param {number[]} nums
 * @return {number}
 */
 var removeDuplicates = function(nums) {
    let k=0;
    for(let i=0;i<nums.length;i++){
        if(nums[i]!=nums[i+1]){
            nums[k++]=nums[i];
        }
    }
    return k;    
};

// 80.删除有序数组中的重复项 II
// 一个元素可最多重复两次
/**
 * @param {number[]} nums
 * @return {number}
 */
 var removeDuplicates = function(nums) {
    let k=0;
    for(let i=0;i<nums.length;i++){
        if(nums[i]==nums[i+1]){
            if(nums[i]!=nums[i+2]){
                nums[k++]=nums[i];
            }
        }else{
            nums[k++]=nums[i];
        }
    }
    return k;
};

// 283. 移动零
/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
 var moveZeroes = function(nums) {
    let k=0;
    let j=0;
    for(let i=0;i<nums.length;i++){
        if(nums[i]!=0){
            nums[k++]=nums[i];
        }else{
            j++;
        }
    }
    for(let i=k;i<nums.length;i++){
        nums[i]=0;
    }
    
};


// 977. 有序数组的平方
// 输入：nums = [-4,-1,0,3,10]
// 输出：[0,1,9,16,100]
// 解释：平方后，数组变为 [16,1,0,9,100]
// 排序后，数组变为 [0,1,9,16,100]


// 使用双指针或者暴力解法
/**
 * @param {number[]} nums
 * @return {number[]}
 */
 var sortedSquares = function(nums) {
    let left=0;
    let right=nums.length-1;
    let k=nums.length-1;
    const ans=[];
    while(left<=right){
        if(nums[left]*nums[left]<nums[right]*nums[right]){
            ans[k--]=nums[right]*nums[right];
            right--;
        }else{
            ans[k--]=nums[left]*nums[left];
            left++;
        }
    }
    return ans;
};

// 844. 比较含退格的字符串
// 给定 s 和 t 两个字符串，当它们分别被输入到空白的文本编辑器后，如果两者相等，
// 返回 true 。# 代表退格字符。
// 输入：s = "ab#c", t = "ad#c"
// 输出：true
// 解释：s 和 t 都会变成 "ac"。
// 思路：使用双指针 fast slow 如果fast为# 那么slow--
/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
 var backspaceCompare = function(s, t) {
    var del=function(s){
        let arr=s.split('');
        let fast=0,slow=0;
        while(fast<arr.length){
            if(arr[fast]!='#') arr[slow++]=arr[fast];
            else if(slow!=0){
                slow--;
            }
                fast++;
        }
        arr.length=slow;
        return arr.join('');
    }
    return del(s)==del(t);
};

// 解法二：栈
/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
 var backspaceCompare = function (s, t) {
    const build = (str) => {
      let res = [];
      for (let a of str) {
        // 如果为退格键就出栈，否则就出栈
        res[a == "#" ? "pop" : "push"](a);
      }
      return res.join("");
    };
    // 比较经过处理后的俩字符串 s 及 t 是否相同
    return build(s) == build(t);
  };
  